library(dplyr)
library(tidyr)
library(ggplot2)
library(readr)
library(usmap)
library(gridExtra)
library(biscale)
library(cowplot)
library(viridis) # viridis color scale
library(sf)
Children_TX <-read.csv("CData/Children_TX.csv")
Children_DFPS <-read.csv("CData/Children_DFPS.csv")
Adopt_Need <-read.csv("CData/Adopt_Need.csv")
Adopt_Need0 <-read.csv("CData/Adopt_Need0.csv") # Demographics by Region (County not available)
Homes <-read.csv("CData/Homes.csv")
PEI_Families_Served <-read.csv("CData/PEI_Families_Served.csv")
PEI_Expenditures <-read.csv("CData/PEI_Expenditures.csv")
Exits <-read.csv("CData/Exits.csv")
map_data <- read.csv("CData/map_data_cont.csv")

# Homes
# Plot 1
Homes %>% group_by(Year, Type) %>% summarise(Total = sum(Count)) %>% ggplot(aes(x = Year, y = Total, fill = Type)) + geom_bar(stat = 'identity') + theme(axis.text.x = element_text(color="black", size=9, angle=45)) + ggtitle("Foster/Adoptive Homes on Aug 31, 2020")
`summarise()` has grouped output by 'Year'. You can override using the `.groups` argument.

YourCounty = "Travis"
filter(Homes, County == YourCounty) %>% group_by(Year, Type) %>% summarise(Total = sum(Count)) %>% ggplot(aes(x = Year, y = Total, fill = Type)) + geom_bar(stat = 'identity') + theme(axis.text.x = element_text(color="black", size=9, angle=45)) + ggtitle(paste("Number of Homes in ",YourCounty," County",sep="")) + scale_fill_manual(name = "Type", values=c("Red", "Blue", "Pink"))
`summarise()` has grouped output by 'Year'. You can override using the `.groups` argument.

# Plot 2
map_data_year <- filter(map_data, Year == "2020")
plot_usmap(data = map_data_year, values = "Homes_Total_County", include = c("TX"), color = "black") +
#scale_fill_binned(name = "Total", low = "#b7d6ce", high = "#2e7265", na.value = "white")
scale_fill_steps(name = "Total", n.breaks = 8, low = "grey", high = "navy", na.value = "white") +
labs(x = NULL,
y = NULL,
title = "Texas Counties",
subtitle = "Foster/Adoptive Homes on Aug 31, 2020",
caption = "Data from data.texas.gov")

PEI_Expenditures_long <- PEI_Expenditures %>%
pivot_longer(!Year, names_to = "Program", values_to = "Expenditures")
# changing order of factors for plotting
PEI_Expenditures_long$Program = as.factor(PEI_Expenditures_long$Program)
PEI_Expenditures_long$Program <- factor(PEI_Expenditures_long$Program, levels = c("HIP", "TNFP", "THV", "HOPES"))
# changing order of factors for plotting
PEI_Families_Served$Program = as.factor(PEI_Families_Served$Program)
PEI_Families_Served$Program <- factor(PEI_Families_Served$Program, levels = c("HIP", "TNFP", "THV", "HOPES"))
# Plot 1
PEI_Expenditures_long %>% group_by(Year, Program) %>% summarise(Total = sum(Expenditures, na.rm = TRUE)) %>% ggplot(aes(x = Year, y = Total, fill = Program)) + geom_bar(stat = 'identity') + theme(axis.text.x = element_text(color="black", size=9, angle=45)) + ggtitle("PEI Expenditures")
`summarise()` has grouped output by 'Year'. You can override using the `.groups` argument.

# Plot 2
PEI_Families_Served$Program[PEI_Families_Served$Program %in% c("THV STATE","THV MIECHV")] <- "THV"
PEI_Families_Served %>% group_by(Year, Program) %>% summarise(Total = sum(Families_Served, na.rm = TRUE)) %>% ggplot(aes(x = Year, y = Total, fill = Program)) + geom_bar(stat = 'identity') + theme(axis.text.x = element_text(color="black", size=9, angle=45)) + ggtitle("PEI Families Served") +
xlim(2015, 2021)
`summarise()` has grouped output by 'Year'. You can override using the `.groups` argument.
Warning: Removed 2 rows containing missing values (geom_bar).

# Plot 4
map_data_year <- filter(map_data, Year == "2020")
plot_usmap(data = map_data_year, values = "Total_Families_Served_HOPES", include = c("TX"), color = "black") +
#scale_fill_binned(name = "Total", low = "#b7d6ce", high = "#2e7265", na.value = "white")
scale_fill_steps(name = "Total", n.breaks = 8, low = "grey", high = "navy", na.value = "white") +
labs(x = NULL,
y = NULL,
title = "Texas Counties",
subtitle = "Families Served by HOPES",
caption = "Data from data.texas.gov")

plot_usmap(data = map_data_year, values = "Total_Families_Served_TNFP", include = c("TX"), color = "black") +
#scale_fill_binned(name = "Total", low = "#b7d6ce", high = "#2e7265", na.value = "white")
scale_fill_steps(name = "Total", n.breaks = 8, low = "grey", high = "navy", na.value = "white") +
labs(x = NULL,
y = NULL,
title = "Texas Counties",
subtitle = "Families Served by TNFP",
caption = "Data from data.texas.gov")

plot_usmap(data = map_data_year, values = "Total_Families_Served_THV", include = c("TX"), color = "black") +
#scale_fill_binned(name = "Total", low = "#b7d6ce", high = "#2e7265", na.value = "white")
scale_fill_steps(name = "Total", n.breaks = 8, low = "grey", high = "navy", na.value = "white") +
labs(x = NULL,
y = NULL,
title = "Texas Counties",
subtitle = "Families Served by THV",
caption = "Data from data.texas.gov")

plot_usmap(data = map_data_year, values = "Total_Families_Served_HIP", include = c("TX"), color = "black") +
#scale_fill_binned(name = "Total", low = "#b7d6ce", high = "#2e7265", na.value = "white")
scale_fill_steps(name = "Total", n.breaks = 8, low = "grey", high = "navy", na.value = "white") +
labs(x = NULL,
y = NULL,
title = "Texas Counties",
subtitle = "Families Served by HIP",
caption = "Data from data.texas.gov")

map_data_2014 <- filter(map_data, Year == "2014")
plot_usmap(data = map_data_2014, values = "Physician_Access", include = c("TX"), color = "black") +
#scale_fill_binned(name = "Total", low = "#b7d6ce", high = "#2e7265", na.value = "white")
scale_fill_steps(name = "Total", n.breaks = 8, low = "grey", high = "navy", na.value = "red") +
labs(x = NULL,
y = NULL,
title = "Texas Counties",
subtitle = "Physician Access",
caption = "Data from data.texas.gov")

plot_usmap(data = map_data_2014, values = "Uninsured.Rate", include = c("TX"), color = "black") +
#scale_fill_binned(name = "Total", low = "#b7d6ce", high = "#2e7265", na.value = "white")
scale_fill_steps(name = "Total", n.breaks = 8, low = "navy", high = "grey", na.value = "red") +
labs(x = NULL,
y = NULL,
title = "Texas Counties",
subtitle = "Uninsured Rate",
caption = "Data from data.texas.gov")

plot_usmap(data = map_data_2014, values = "Graduation.Rate", include = c("TX"), color = "black") +
#scale_fill_binned(name = "Total", low = "#b7d6ce", high = "#2e7265", na.value = "white")
scale_fill_steps(name = "Total", n.breaks = 8, low = "grey", high = "navy", na.value = "red") +
labs(x = NULL,
y = NULL,
title = "Texas Counties",
subtitle = "Graduation Rate",
caption = "Data from data.texas.gov")

plot_usmap(data = map_data_2014, values = "Personal.Income.per.Capita", include = c("TX"), color = "black") +
#scale_fill_binned(name = "Total", low = "#b7d6ce", high = "#2e7265", na.value = "white")
scale_fill_steps(name = "Total", n.breaks = 8, low = "grey", high = "navy", na.value = "red") +
labs(x = NULL,
y = NULL,
title = "Texas Counties",
subtitle = "Personal.Income.per.Capita",
caption = "Data from data.texas.gov")

plot_usmap(data = map_data_2014, values = "Average.Wages", include = c("TX"), color = "black") +
#scale_fill_binned(name = "Total", low = "#b7d6ce", high = "#2e7265", na.value = "white")
scale_fill_steps(name = "Total", n.breaks = 8, low = "grey", high = "navy", na.value = "red") +
labs(x = NULL,
y = NULL,
title = "Texas Counties",
subtitle = "Average.Wages",
caption = "Data from data.texas.gov")

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkoZHBseXIpIApsaWJyYXJ5KHRpZHlyKSAKbGlicmFyeShnZ3Bsb3QyKSAKbGlicmFyeShyZWFkcikKbGlicmFyeSh1c21hcCkKbGlicmFyeShncmlkRXh0cmEpCgpsaWJyYXJ5KGJpc2NhbGUpCmxpYnJhcnkoY293cGxvdCkKbGlicmFyeSh2aXJpZGlzKSAjIHZpcmlkaXMgY29sb3Igc2NhbGUKbGlicmFyeShzZikKCkNoaWxkcmVuX1RYIDwtcmVhZC5jc3YoIkNEYXRhL0NoaWxkcmVuX1RYLmNzdiIpCkNoaWxkcmVuX0RGUFMgPC1yZWFkLmNzdigiQ0RhdGEvQ2hpbGRyZW5fREZQUy5jc3YiKQpBZG9wdF9OZWVkIDwtcmVhZC5jc3YoIkNEYXRhL0Fkb3B0X05lZWQuY3N2IikKQWRvcHRfTmVlZDAgPC1yZWFkLmNzdigiQ0RhdGEvQWRvcHRfTmVlZDAuY3N2IikgIyBEZW1vZ3JhcGhpY3MgYnkgUmVnaW9uIChDb3VudHkgbm90IGF2YWlsYWJsZSkKSG9tZXMgPC1yZWFkLmNzdigiQ0RhdGEvSG9tZXMuY3N2IikKUEVJX0ZhbWlsaWVzX1NlcnZlZCA8LXJlYWQuY3N2KCJDRGF0YS9QRUlfRmFtaWxpZXNfU2VydmVkLmNzdiIpClBFSV9FeHBlbmRpdHVyZXMgPC1yZWFkLmNzdigiQ0RhdGEvUEVJX0V4cGVuZGl0dXJlcy5jc3YiKQoKRXhpdHMgPC1yZWFkLmNzdigiQ0RhdGEvRXhpdHMuY3N2IikKbWFwX2RhdGEgPC0gcmVhZC5jc3YoIkNEYXRhL21hcF9kYXRhX2NvbnQuY3N2IikKYGBgCgpgYGB7cn0KIyBDaGlsZHJlbiBpbiBERlBTIEN1c3RvZHkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLQojIFBsb3QgMUEgYW5kIDFCCiMgLS0tLS0tLS0tLS0tLS0tLS0tLQpDaGlsZHJlbl9ERlBTICU+JSBncm91cF9ieShZZWFyLCBBZ2VfR3JvdXApICU+JSBzdW1tYXJpc2UoVG90YWwgPSBzdW0oQ291bnQpKSAlPiUgZ2dwbG90KGFlcyh4ID0gIFllYXIsIHkgPSBUb3RhbCwgZmlsbCA9IEFnZV9Hcm91cCkpICsgZ2VvbV9iYXIoc3RhdCA9ICdpZGVudGl0eScpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoY29sb3I9ImJsYWNrIiwgc2l6ZT05LCBhbmdsZT00NSkpICsgZ2d0aXRsZSgiTnVtYmVyIG9mIENoaWxkcmVuIGluIHRoZSBTdGF0ZSBvZiBUZXhhcyIpICsgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoIiM1M2I2OWMiLCAiIzIzOGU5YyIsICIjMmU0ODczIikpIAoKWW91ckNvdW50eSA9ICJUcmF2aXMiCmZpbHRlcihDaGlsZHJlbl9ERlBTLCBDb3VudHkgPT0gWW91ckNvdW50eSkgJT4lIGdyb3VwX2J5KFllYXIsIEFnZV9Hcm91cCkgJT4lIHN1bW1hcmlzZShUb3RhbCA9IHN1bShDb3VudCkpICU+JSBnZ3Bsb3QoYWVzKHggPSAgWWVhciwgeSA9IFRvdGFsLCBmaWxsID0gQWdlX0dyb3VwKSkgKyBnZW9tX2JhcihzdGF0ID0gJ2lkZW50aXR5JykgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChjb2xvcj0iYmxhY2siLCBzaXplPTksIGFuZ2xlPTQ1KSkgKyBnZ3RpdGxlKHBhc3RlKCJOdW1iZXIgb2YgQ2hpbGRyZW4gaW4gIixZb3VyQ291bnR5LCIgQ291bnR5IixzZXA9IiIpKSArIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWUgPSAiQWdlIEdyb3VwIiwgdmFsdWVzPWMoIiM1M2I2OWMiLCAiIzIzOGU5YyIsICIjMmU0ODczIikpIAoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2hpbnkgQXBwCiMgLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBjaGFuZ2luZyBvcmRlciBvZiBmYWN0b3JzIGZvciBwbG90dGluZwpDaGlsZHJlbl9ERlBTJEFnZV9Hcm91cCA9IGFzLmZhY3RvcihDaGlsZHJlbl9ERlBTJEFnZV9Hcm91cCkKQ2hpbGRyZW5fREZQUyRBZ2VfR3JvdXAgPC0gZmFjdG9yKENoaWxkcmVuX0RGUFMkQWdlX0dyb3VwLCBsZXZlbHMgPSBjKCIwIHRvIDUgWWVhcnMiLCAiNiB0byAxMiBZZWFycyIsICIxMyB0byAxOCBZZWFycyIpKQoKQ2hpbGRyZW5fREZQUyAlPiUgZmlsdGVyKFllYXIgPT0gIjIwMjAiKSAlPiUgCiAgZ3JvdXBfYnkoQWdlX0dyb3VwKSAlPiUgc3VtbWFyaXNlKFRvdGFsID0gc3VtKENvdW50KSkgJT4lIGdncGxvdChhZXMoeCA9ICBBZ2VfR3JvdXAsIHkgPSBUb3RhbCwgZmlsbCA9IEFnZV9Hcm91cCkpICsgZ2VvbV9iYXIoc3RhdCA9ICdpZGVudGl0eScpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoY29sb3I9ImJsYWNrIiwgc2l6ZT05LCBhbmdsZT0wKSkgKyBnZ3RpdGxlKCJOdW1iZXIgb2YgQ2hpbGRyZW4gaW4gdGhlIFN0YXRlIG9mIFRleGFzIikgKyBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiIzUzYjY5YyIsICIjMjM4ZTljIiwgIiMyZTQ4NzMiKSkgCgpZb3VyQ291bnR5ID0gIlRyYXZpcyIKQ2hpbGRyZW5fREZQUyAlPiUgZmlsdGVyKFllYXIgPT0gIjIwMjAiKSAlPiUgCmZpbHRlcihDb3VudHkgPT0gWW91ckNvdW50eSkgJT4lIGdyb3VwX2J5KFllYXIsIEFnZV9Hcm91cCkgJT4lIHN1bW1hcmlzZShUb3RhbCA9IHN1bShDb3VudCkpICU+JSBnZ3Bsb3QoYWVzKHggPSAgQWdlX0dyb3VwLCB5ID0gVG90YWwsIGZpbGwgPSBBZ2VfR3JvdXApKSArIGdlb21fYmFyKHN0YXQgPSAnaWRlbnRpdHknKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGNvbG9yPSJibGFjayIsIHNpemU9OSwgYW5nbGU9MCkpICsgZ2d0aXRsZShwYXN0ZSgiTnVtYmVyIG9mIENoaWxkcmVuIGluICIsWW91ckNvdW50eSwiIENvdW50eSIsc2VwPSIiKSkgKyBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiIzUzYjY5YyIsICIjMjM4ZTljIiwgIiMyZTQ4NzMiKSkgCgptYXBfZGF0YV95ZWFyIDwtIGZpbHRlcihtYXBfZGF0YSwgWWVhciA9PSAiMjAyMCIpIApwbG90X3VzbWFwKGRhdGEgPSBtYXBfZGF0YV95ZWFyLCB2YWx1ZXMgPSAiREZQU19jaGlsZHJlbl9Ub3RhbF9Db3VudHkiLCBpbmNsdWRlID0gYygiVFgiKSwgY29sb3IgPSAiYmxhY2siKSArIAogICNzY2FsZV9maWxsX2Jpbm5lZChuYW1lID0gIlRvdGFsIiwgbG93ID0gIiNlZGVkZWQiLCBoaWdoID0gImJsYWNrIiwgbmEudmFsdWUgPSAid2hpdGUiKQogIHNjYWxlX2ZpbGxfc3RlcHMobmFtZSA9ICJUb3RhbCIsIG4uYnJlYWtzID0gOCwgbG93ID0gImdyZXkiLCBoaWdoID0gIm5hdnkiLCBuYS52YWx1ZSA9ICJ3aGl0ZSIpICsKICAgIGxhYnMoeCA9IE5VTEwsIAogICAgICAgICB5ID0gTlVMTCwgCiAgICAgICAgIHRpdGxlID0gIlRleGFzIENvdW50aWVzIiwgCiAgICAgICAgIHN1YnRpdGxlID0gIkNoaWxkcmVuIGluIERGUFMgTGVnYWwgUmVzcG9uc2liaWxpdHkgZHVyaW5nIDIwMjAiLCAKICAgICAgICAgY2FwdGlvbiA9ICJEYXRhIGZyb20gZGF0YS50ZXhhcy5nb3YiKQoKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLQojIFBsb3QgMgojIC0tLS0tLS0tLS0tLS0tLS0tLS0KbWFwX2RhdGFfeWVhciA8LSBmaWx0ZXIobWFwX2RhdGEsIFllYXIgPT0gIjIwMjAiKSAKCnBsb3RfdXNtYXAoZGF0YSA9IG1hcF9kYXRhX3llYXIsIHZhbHVlcyA9ICJERlBTX2NoaWxkcmVuX1RvdGFsX0NvdW50eSIsIGluY2x1ZGUgPSBjKCJUWCIpLCBjb2xvciA9ICJibGFjayIpICsgCiAgI3NjYWxlX2ZpbGxfYmlubmVkKG5hbWUgPSAiVG90YWwiLCBsb3cgPSAiI2VkZWRlZCIsIGhpZ2ggPSAiYmxhY2siLCBuYS52YWx1ZSA9ICJ3aGl0ZSIpCiAgc2NhbGVfZmlsbF9zdGVwcyhuYW1lID0gIlRvdGFsIiwgbi5icmVha3MgPSA4LCBsb3cgPSAiZ3JleSIsIGhpZ2ggPSAibmF2eSIsIG5hLnZhbHVlID0gIndoaXRlIikgKwogICAgbGFicyh4ID0gTlVMTCwgCiAgICAgICAgIHkgPSBOVUxMLCAKICAgICAgICAgdGl0bGUgPSAiVGV4YXMgQ291bnRpZXMiLCAKICAgICAgICAgc3VidGl0bGUgPSAiQ2hpbGRyZW4gaW4gREZQUyBMZWdhbCBSZXNwb25zaWJpbGl0eSBkdXJpbmcgMjAyMCIsIAogICAgICAgICBjYXB0aW9uID0gIkRhdGEgZnJvbSBkYXRhLnRleGFzLmdvdiIpCgojIHBsb3RfdXNtYXAoZGF0YSA9IHR4X3RyYW5zZm9ybWVkLCB2YWx1ZXMgPSAiVG90YWxfQ291bnR5IiwgaW5jbHVkZSA9IGMoIlRYIiksIGNvbG9yID0gImJsYWNrIikgKyAKIyAgIHNjYWxlX2ZpbGxfY29udGludW91cyhuYW1lID0gIlRvdGFsIiwgbG93ID0gIiNiN2Q2Y2UiLCBoaWdoID0gIiMyZTcyNjUiLCBuYS52YWx1ZSA9ICJ3aGl0ZSIpCiMKIyBwbG90X3VzbWFwKGRhdGEgPSB0eF90cmFuc2Zvcm1lZCwgdmFsdWVzID0gIlRvdGFsX1JlZ2lvbiIsIGluY2x1ZGUgPSBjKCJUWCIpLCBjb2xvciA9ICJibGFjayIpICsgCiMgICBzY2FsZV9maWxsX2Jpbm5lZChuYW1lID0gIlRvdGFsIiwgYnJlYWtzID0gc29ydChBZG9wdF9OZWVkX2J5UmVnaW9uJFRvdGFsX1JlZ2lvbiwgZGVjcmVhc2luZyA9IFRSVUUpLCBuYS52YWx1ZSA9ICJ3aGl0ZSIpCiMgCiMgcGxvdF91c21hcChkYXRhID0gdHhfdHJhbnNmb3JtZWQsIHZhbHVlcyA9ICJUb3RhbF9SZWdpb24iLCBpbmNsdWRlID0gYygiVFgiKSwgY29sb3IgPSAiYmxhY2siKSArIAojICAgc2NhbGVfZmlsbF9zdGVwcyhuLmJyZWFrcyA9IDExLCBsb3cgPSAiZ3JleSIsIGhpZ2ggPSAiYnJvd24iLCBuYS52YWx1ZSA9ICJ3aGl0ZSIpCiAgCmBgYAoKYGBge3J9CiMgSG9tZXMKCiMgUGxvdCAxCkhvbWVzICU+JSBncm91cF9ieShZZWFyLCBUeXBlKSAlPiUgc3VtbWFyaXNlKFRvdGFsID0gc3VtKENvdW50KSkgJT4lIGdncGxvdChhZXMoeCA9ICBZZWFyLCB5ID0gVG90YWwsIGZpbGwgPSBUeXBlKSkgKyBnZW9tX2JhcihzdGF0ID0gJ2lkZW50aXR5JykgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChjb2xvcj0iYmxhY2siLCBzaXplPTksIGFuZ2xlPTQ1KSkgKyBnZ3RpdGxlKCJGb3N0ZXIvQWRvcHRpdmUgSG9tZXMgb24gQXVnIDMxLCAyMDIwIikKCllvdXJDb3VudHkgPSAiVHJhdmlzIgpmaWx0ZXIoSG9tZXMsIENvdW50eSA9PSBZb3VyQ291bnR5KSAlPiUgZ3JvdXBfYnkoWWVhciwgVHlwZSkgJT4lIHN1bW1hcmlzZShUb3RhbCA9IHN1bShDb3VudCkpICU+JSBnZ3Bsb3QoYWVzKHggPSAgWWVhciwgeSA9IFRvdGFsLCBmaWxsID0gVHlwZSkpICsgZ2VvbV9iYXIoc3RhdCA9ICdpZGVudGl0eScpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoY29sb3I9ImJsYWNrIiwgc2l6ZT05LCBhbmdsZT00NSkpICsgZ2d0aXRsZShwYXN0ZSgiTnVtYmVyIG9mIEhvbWVzIGluICIsWW91ckNvdW50eSwiIENvdW50eSIsc2VwPSIiKSkgKyBzY2FsZV9maWxsX21hbnVhbChuYW1lID0gIlR5cGUiLCB2YWx1ZXM9YygiUmVkIiwgIkJsdWUiLCAiUGluayIpKSAKCiMgUGxvdCAyCm1hcF9kYXRhX3llYXIgPC0gZmlsdGVyKG1hcF9kYXRhLCBZZWFyID09ICIyMDIwIikgCgpwbG90X3VzbWFwKGRhdGEgPSBtYXBfZGF0YV95ZWFyLCB2YWx1ZXMgPSAiSG9tZXNfVG90YWxfQ291bnR5IiwgaW5jbHVkZSA9IGMoIlRYIiksIGNvbG9yID0gImJsYWNrIikgKyAKICAjc2NhbGVfZmlsbF9iaW5uZWQobmFtZSA9ICJUb3RhbCIsIGxvdyA9ICIjYjdkNmNlIiwgaGlnaCA9ICIjMmU3MjY1IiwgbmEudmFsdWUgPSAid2hpdGUiKQogIHNjYWxlX2ZpbGxfc3RlcHMobmFtZSA9ICJUb3RhbCIsIG4uYnJlYWtzID0gOCwgbG93ID0gImdyZXkiLCBoaWdoID0gIm5hdnkiLCBuYS52YWx1ZSA9ICJ3aGl0ZSIpICsKICAgIGxhYnMoeCA9IE5VTEwsIAogICAgICAgICB5ID0gTlVMTCwgCiAgICAgICAgIHRpdGxlID0gIlRleGFzIENvdW50aWVzIiwgCiAgICAgICAgIHN1YnRpdGxlID0gIkZvc3Rlci9BZG9wdGl2ZSBIb21lcyBvbiBBdWcgMzEsIDIwMjAiLCAKICAgICAgICAgY2FwdGlvbiA9ICJEYXRhIGZyb20gZGF0YS50ZXhhcy5nb3YiKQoKYGBgCgpgYGB7cn0KUEVJX0V4cGVuZGl0dXJlc19sb25nIDwtIFBFSV9FeHBlbmRpdHVyZXMgJT4lIAogIHBpdm90X2xvbmdlcighWWVhciwgbmFtZXNfdG8gPSAiUHJvZ3JhbSIsIHZhbHVlc190byA9ICJFeHBlbmRpdHVyZXMiKQoKIyBjaGFuZ2luZyBvcmRlciBvZiBmYWN0b3JzIGZvciBwbG90dGluZwpQRUlfRXhwZW5kaXR1cmVzX2xvbmckUHJvZ3JhbSA9IGFzLmZhY3RvcihQRUlfRXhwZW5kaXR1cmVzX2xvbmckUHJvZ3JhbSkKUEVJX0V4cGVuZGl0dXJlc19sb25nJFByb2dyYW0gPC0gZmFjdG9yKFBFSV9FeHBlbmRpdHVyZXNfbG9uZyRQcm9ncmFtLCBsZXZlbHMgPSBjKCJISVAiLCAiVE5GUCIsICJUSFYiLCAiSE9QRVMiKSkKCiMgY2hhbmdpbmcgb3JkZXIgb2YgZmFjdG9ycyBmb3IgcGxvdHRpbmcKUEVJX0ZhbWlsaWVzX1NlcnZlZCRQcm9ncmFtID0gYXMuZmFjdG9yKFBFSV9GYW1pbGllc19TZXJ2ZWQkUHJvZ3JhbSkKUEVJX0ZhbWlsaWVzX1NlcnZlZCRQcm9ncmFtIDwtIGZhY3RvcihQRUlfRmFtaWxpZXNfU2VydmVkJFByb2dyYW0sIGxldmVscyA9IGMoIkhJUCIsICJUTkZQIiwgIlRIViIsICJIT1BFUyIpKQoKIyBQbG90IDEKUEVJX0V4cGVuZGl0dXJlc19sb25nICU+JSBncm91cF9ieShZZWFyLCBQcm9ncmFtKSAlPiUgc3VtbWFyaXNlKFRvdGFsID0gc3VtKEV4cGVuZGl0dXJlcywgbmEucm0gPSBUUlVFKSkgJT4lIGdncGxvdChhZXMoeCA9ICBZZWFyLCB5ID0gVG90YWwsIGZpbGwgPSBQcm9ncmFtKSkgKyBnZW9tX2JhcihzdGF0ID0gJ2lkZW50aXR5JykgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChjb2xvcj0iYmxhY2siLCBzaXplPTksIGFuZ2xlPTQ1KSkgKyBnZ3RpdGxlKCJQRUkgRXhwZW5kaXR1cmVzIikKCiMgUGxvdCAyClBFSV9GYW1pbGllc19TZXJ2ZWQkUHJvZ3JhbVtQRUlfRmFtaWxpZXNfU2VydmVkJFByb2dyYW0gJWluJSBjKCJUSFYgU1RBVEUiLCJUSFYgTUlFQ0hWIildIDwtICJUSFYiCgpQRUlfRmFtaWxpZXNfU2VydmVkICU+JSBncm91cF9ieShZZWFyLCBQcm9ncmFtKSAlPiUgc3VtbWFyaXNlKFRvdGFsID0gc3VtKEZhbWlsaWVzX1NlcnZlZCwgbmEucm0gPSBUUlVFKSkgJT4lIGdncGxvdChhZXMoeCA9ICBZZWFyLCB5ID0gVG90YWwsIGZpbGwgPSBQcm9ncmFtKSkgKyBnZW9tX2JhcihzdGF0ID0gJ2lkZW50aXR5JykgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChjb2xvcj0iYmxhY2siLCBzaXplPTksIGFuZ2xlPTQ1KSkgKyBnZ3RpdGxlKCJQRUkgRmFtaWxpZXMgU2VydmVkIikgKyAKICB4bGltKDIwMTUsIDIwMjEpCgojIFBsb3QgNAptYXBfZGF0YV95ZWFyIDwtIGZpbHRlcihtYXBfZGF0YSwgWWVhciA9PSAiMjAyMCIpIAoKcGxvdF91c21hcChkYXRhID0gbWFwX2RhdGFfeWVhciwgdmFsdWVzID0gIlRvdGFsX0ZhbWlsaWVzX1NlcnZlZF9IT1BFUyIsIGluY2x1ZGUgPSBjKCJUWCIpLCBjb2xvciA9ICJibGFjayIpICsgCiAgI3NjYWxlX2ZpbGxfYmlubmVkKG5hbWUgPSAiVG90YWwiLCBsb3cgPSAiI2I3ZDZjZSIsIGhpZ2ggPSAiIzJlNzI2NSIsIG5hLnZhbHVlID0gIndoaXRlIikKICAgIHNjYWxlX2ZpbGxfc3RlcHMobmFtZSA9ICJUb3RhbCIsIG4uYnJlYWtzID0gOCwgbG93ID0gImdyZXkiLCBoaWdoID0gIm5hdnkiLCBuYS52YWx1ZSA9ICJ3aGl0ZSIpICsKICAgIGxhYnMoeCA9IE5VTEwsIAogICAgICAgICB5ID0gTlVMTCwgCiAgICAgICAgIHRpdGxlID0gIlRleGFzIENvdW50aWVzIiwgCiAgICAgICAgIHN1YnRpdGxlID0gIkZhbWlsaWVzIFNlcnZlZCBieSBIT1BFUyIsIAogICAgICAgICBjYXB0aW9uID0gIkRhdGEgZnJvbSBkYXRhLnRleGFzLmdvdiIpCgpwbG90X3VzbWFwKGRhdGEgPSBtYXBfZGF0YV95ZWFyLCB2YWx1ZXMgPSAiVG90YWxfRmFtaWxpZXNfU2VydmVkX1RORlAiLCBpbmNsdWRlID0gYygiVFgiKSwgY29sb3IgPSAiYmxhY2siKSArIAogICNzY2FsZV9maWxsX2Jpbm5lZChuYW1lID0gIlRvdGFsIiwgbG93ID0gIiNiN2Q2Y2UiLCBoaWdoID0gIiMyZTcyNjUiLCBuYS52YWx1ZSA9ICJ3aGl0ZSIpCiAgICBzY2FsZV9maWxsX3N0ZXBzKG5hbWUgPSAiVG90YWwiLCBuLmJyZWFrcyA9IDgsIGxvdyA9ICJncmV5IiwgaGlnaCA9ICJuYXZ5IiwgbmEudmFsdWUgPSAid2hpdGUiKSArCiAgICBsYWJzKHggPSBOVUxMLCAKICAgICAgICAgeSA9IE5VTEwsIAogICAgICAgICB0aXRsZSA9ICJUZXhhcyBDb3VudGllcyIsIAogICAgICAgICBzdWJ0aXRsZSA9ICJGYW1pbGllcyBTZXJ2ZWQgYnkgVE5GUCIsIAogICAgICAgICBjYXB0aW9uID0gIkRhdGEgZnJvbSBkYXRhLnRleGFzLmdvdiIpCgpwbG90X3VzbWFwKGRhdGEgPSBtYXBfZGF0YV95ZWFyLCB2YWx1ZXMgPSAiVG90YWxfRmFtaWxpZXNfU2VydmVkX1RIViIsIGluY2x1ZGUgPSBjKCJUWCIpLCBjb2xvciA9ICJibGFjayIpICsgCiAgI3NjYWxlX2ZpbGxfYmlubmVkKG5hbWUgPSAiVG90YWwiLCBsb3cgPSAiI2I3ZDZjZSIsIGhpZ2ggPSAiIzJlNzI2NSIsIG5hLnZhbHVlID0gIndoaXRlIikKICAgIHNjYWxlX2ZpbGxfc3RlcHMobmFtZSA9ICJUb3RhbCIsIG4uYnJlYWtzID0gOCwgbG93ID0gImdyZXkiLCBoaWdoID0gIm5hdnkiLCBuYS52YWx1ZSA9ICJ3aGl0ZSIpICsKICAgIGxhYnMoeCA9IE5VTEwsIAogICAgICAgICB5ID0gTlVMTCwgCiAgICAgICAgIHRpdGxlID0gIlRleGFzIENvdW50aWVzIiwgCiAgICAgICAgIHN1YnRpdGxlID0gIkZhbWlsaWVzIFNlcnZlZCBieSBUSFYiLCAKICAgICAgICAgY2FwdGlvbiA9ICJEYXRhIGZyb20gZGF0YS50ZXhhcy5nb3YiKQoKcGxvdF91c21hcChkYXRhID0gbWFwX2RhdGFfeWVhciwgdmFsdWVzID0gIlRvdGFsX0ZhbWlsaWVzX1NlcnZlZF9ISVAiLCBpbmNsdWRlID0gYygiVFgiKSwgY29sb3IgPSAiYmxhY2siKSArIAogICNzY2FsZV9maWxsX2Jpbm5lZChuYW1lID0gIlRvdGFsIiwgbG93ID0gIiNiN2Q2Y2UiLCBoaWdoID0gIiMyZTcyNjUiLCBuYS52YWx1ZSA9ICJ3aGl0ZSIpCiAgICBzY2FsZV9maWxsX3N0ZXBzKG5hbWUgPSAiVG90YWwiLCBuLmJyZWFrcyA9IDgsIGxvdyA9ICJncmV5IiwgaGlnaCA9ICJuYXZ5IiwgbmEudmFsdWUgPSAid2hpdGUiKSArCiAgICBsYWJzKHggPSBOVUxMLCAKICAgICAgICAgeSA9IE5VTEwsIAogICAgICAgICB0aXRsZSA9ICJUZXhhcyBDb3VudGllcyIsIAogICAgICAgICBzdWJ0aXRsZSA9ICJGYW1pbGllcyBTZXJ2ZWQgYnkgSElQIiwgCiAgICAgICAgIGNhcHRpb24gPSAiRGF0YSBmcm9tIGRhdGEudGV4YXMuZ292IikKCmBgYAoKYGBge3J9Cm1hcF9kYXRhXzIwMTQgPC0gZmlsdGVyKG1hcF9kYXRhLCBZZWFyID09ICIyMDE0IikgCgpwbG90X3VzbWFwKGRhdGEgPSBtYXBfZGF0YV8yMDE0LCB2YWx1ZXMgPSAiUGh5c2ljaWFuX0FjY2VzcyIsIGluY2x1ZGUgPSBjKCJUWCIpLCBjb2xvciA9ICJibGFjayIpICsgCiAgI3NjYWxlX2ZpbGxfYmlubmVkKG5hbWUgPSAiVG90YWwiLCBsb3cgPSAiI2I3ZDZjZSIsIGhpZ2ggPSAiIzJlNzI2NSIsIG5hLnZhbHVlID0gIndoaXRlIikKICAgIHNjYWxlX2ZpbGxfc3RlcHMobmFtZSA9ICJUb3RhbCIsIG4uYnJlYWtzID0gOCwgbG93ID0gImdyZXkiLCBoaWdoID0gIm5hdnkiLCBuYS52YWx1ZSA9ICJyZWQiKSArCiAgICBsYWJzKHggPSBOVUxMLCAKICAgICAgICAgeSA9IE5VTEwsIAogICAgICAgICB0aXRsZSA9ICJUZXhhcyBDb3VudGllcyIsIAogICAgICAgICBzdWJ0aXRsZSA9ICJQaHlzaWNpYW4gQWNjZXNzIiwgCiAgICAgICAgIGNhcHRpb24gPSAiRGF0YSBmcm9tIGRhdGEudGV4YXMuZ292IikKCnBsb3RfdXNtYXAoZGF0YSA9IG1hcF9kYXRhXzIwMTQsIHZhbHVlcyA9ICJVbmluc3VyZWQuUmF0ZSIsIGluY2x1ZGUgPSBjKCJUWCIpLCBjb2xvciA9ICJibGFjayIpICsgCiAgI3NjYWxlX2ZpbGxfYmlubmVkKG5hbWUgPSAiVG90YWwiLCBsb3cgPSAiI2I3ZDZjZSIsIGhpZ2ggPSAiIzJlNzI2NSIsIG5hLnZhbHVlID0gIndoaXRlIikKICAgIHNjYWxlX2ZpbGxfc3RlcHMobmFtZSA9ICJUb3RhbCIsIG4uYnJlYWtzID0gOCwgbG93ID0gIm5hdnkiLCBoaWdoID0gImdyZXkiLCBuYS52YWx1ZSA9ICJyZWQiKSArCiAgICBsYWJzKHggPSBOVUxMLCAKICAgICAgICAgeSA9IE5VTEwsIAogICAgICAgICB0aXRsZSA9ICJUZXhhcyBDb3VudGllcyIsIAogICAgICAgICBzdWJ0aXRsZSA9ICJVbmluc3VyZWQgUmF0ZSIsIAogICAgICAgICBjYXB0aW9uID0gIkRhdGEgZnJvbSBkYXRhLnRleGFzLmdvdiIpCgpwbG90X3VzbWFwKGRhdGEgPSBtYXBfZGF0YV8yMDE0LCB2YWx1ZXMgPSAiR3JhZHVhdGlvbi5SYXRlIiwgaW5jbHVkZSA9IGMoIlRYIiksIGNvbG9yID0gImJsYWNrIikgKyAKICAjc2NhbGVfZmlsbF9iaW5uZWQobmFtZSA9ICJUb3RhbCIsIGxvdyA9ICIjYjdkNmNlIiwgaGlnaCA9ICIjMmU3MjY1IiwgbmEudmFsdWUgPSAid2hpdGUiKQogICAgc2NhbGVfZmlsbF9zdGVwcyhuYW1lID0gIlRvdGFsIiwgbi5icmVha3MgPSA4LCBsb3cgPSAiZ3JleSIsIGhpZ2ggPSAibmF2eSIsIG5hLnZhbHVlID0gInJlZCIpICsKICAgIGxhYnMoeCA9IE5VTEwsIAogICAgICAgICB5ID0gTlVMTCwgCiAgICAgICAgIHRpdGxlID0gIlRleGFzIENvdW50aWVzIiwgCiAgICAgICAgIHN1YnRpdGxlID0gIkdyYWR1YXRpb24gUmF0ZSIsIAogICAgICAgICBjYXB0aW9uID0gIkRhdGEgZnJvbSBkYXRhLnRleGFzLmdvdiIpCgpwbG90X3VzbWFwKGRhdGEgPSBtYXBfZGF0YV8yMDE0LCB2YWx1ZXMgPSAiUGVyc29uYWwuSW5jb21lLnBlci5DYXBpdGEiLCBpbmNsdWRlID0gYygiVFgiKSwgY29sb3IgPSAiYmxhY2siKSArIAogICNzY2FsZV9maWxsX2Jpbm5lZChuYW1lID0gIlRvdGFsIiwgbG93ID0gIiNiN2Q2Y2UiLCBoaWdoID0gIiMyZTcyNjUiLCBuYS52YWx1ZSA9ICJ3aGl0ZSIpCiAgICBzY2FsZV9maWxsX3N0ZXBzKG5hbWUgPSAiVG90YWwiLCBuLmJyZWFrcyA9IDgsIGxvdyA9ICJncmV5IiwgaGlnaCA9ICJuYXZ5IiwgbmEudmFsdWUgPSAicmVkIikgKwogICAgbGFicyh4ID0gTlVMTCwgCiAgICAgICAgIHkgPSBOVUxMLCAKICAgICAgICAgdGl0bGUgPSAiVGV4YXMgQ291bnRpZXMiLCAKICAgICAgICAgc3VidGl0bGUgPSAiUGVyc29uYWwuSW5jb21lLnBlci5DYXBpdGEiLCAKICAgICAgICAgY2FwdGlvbiA9ICJEYXRhIGZyb20gZGF0YS50ZXhhcy5nb3YiKQoKcGxvdF91c21hcChkYXRhID0gbWFwX2RhdGFfMjAxNCwgdmFsdWVzID0gIkF2ZXJhZ2UuV2FnZXMiLCBpbmNsdWRlID0gYygiVFgiKSwgY29sb3IgPSAiYmxhY2siKSArIAogICNzY2FsZV9maWxsX2Jpbm5lZChuYW1lID0gIlRvdGFsIiwgbG93ID0gIiNiN2Q2Y2UiLCBoaWdoID0gIiMyZTcyNjUiLCBuYS52YWx1ZSA9ICJ3aGl0ZSIpCiAgICBzY2FsZV9maWxsX3N0ZXBzKG5hbWUgPSAiVG90YWwiLCBuLmJyZWFrcyA9IDgsIGxvdyA9ICJncmV5IiwgaGlnaCA9ICJuYXZ5IiwgbmEudmFsdWUgPSAicmVkIikgKwogICAgbGFicyh4ID0gTlVMTCwgCiAgICAgICAgIHkgPSBOVUxMLCAKICAgICAgICAgdGl0bGUgPSAiVGV4YXMgQ291bnRpZXMiLCAKICAgICAgICAgc3VidGl0bGUgPSAiQXZlcmFnZS5XYWdlcyIsIAogICAgICAgICBjYXB0aW9uID0gIkRhdGEgZnJvbSBkYXRhLnRleGFzLmdvdiIpCgpgYGAKCgoKCgoK